Technical Q&A
SND13 - The siMonitorSource Selector (12-April-98)
Q How do I use the new siMonitorAvailable
and siMonitorSource selectors?
A These selectors work with the sound output
component to select the source that the user hears and makes that
source the default recording source. Because this selector works with
only with the sound output component, you don't need a sound channel
to use it.
The siMonitorAvailable selector
returns a SoundInfoList just like
siOSTypeInputAvailable
does; it is a structure to a short and a
Handle . The handle contains an array of
OSTypes which are the input sources that
can be monitored. See Q&A SND12
for more information about working with a SoundInfoList
structure.
Here is some sample code showing how to find a sound output
component and use the siMonitorSource and
siMonitorAvailable selectors:
include <Sound.h>#include <Errors.h>#include <Memory.h>
// A simple application that gets the available monitor sources,
// finds each of the monitor source names,
// determines which sources are enabled, and sets various sources.
void main(void) {
NumVersionVariant smVersion;
ComponentResult err;
OSType source;
SoundInfoList monitorList;
Component device;
ComponentDescription looking;
smVersion.parts = SndSoundManagerVersion();
// Only Sound Manager 3.1 or later implements the SoundComponentGet/SetInfo calls.
// If you know you're going to run on System 7.5 or later,
// you can skip the SM version check.
if (smVersion.whole >= 0x03100000) {
looking.componentType = kSoundOutputDeviceType;
looking.componentSubType = 0;
looking.componentManufacturer = kAppleManufacturer;
looking.componentFlags = 0;
looking.componentFlagsMask = 0;
device = FindNextComponent (0, &looking);
// here's how to get a list of the available monitor sources
// (and tell if monitor sources are supported)
// this returns a list of the OSTypes for the sources
// (don't forget to dispose of the handle later)
err = GetSoundOutputInfo(device, siMonitorAvailable, &monitorList);
if (err != noErr) // monitor sources not supported, bail in your own way
goto Exit;
DisposeHandle(monitorList.infoHandle);
// don't forget to dispose of the returned handle
// find out which source is monitored
GetSoundOutputInfo(device, siMonitorSource, &source);
// set CD as the monitor source
(if it is present - err <> noErr if not available)
err = SetSoundOutputInfo(device, siMonitorSource, (void *)kCDSource);
// find out which source is monitored again,
to check that the setting made above worked
err = GetSoundOutputInfo(device, siMonitorSource, &source);
}
Exit:
return;
}
The selectors are defined in Universal Headers 3.1 and later. They are:
siMonitorAvailable = FOUR_CHAR_CODE('mnav'),
siMonitorSource = FOUR_CHAR_CODE('mons'),
-- Mark Cookson
Worldwide Developer Technical Support
Technical Q&A
Previous Question | Contents | Next Question
To contact us, please use the Contact Us page.
|